package com.example.demo.controller;

import com.example.demo.model.role;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.File;
import java.util.Arrays;
import java.util.List;

@RequestMapping("/user")
@RestController
public class HelloRestController {


    //无参数
    @RequestMapping("/test1")
    public String test1(){
        return "Hi springMVC";
    }

    //传递一个参数
    @RequestMapping("test2")
    public String test2(String name){
        return name + "是世界第一";
    }

    //传递两个参数
    @RequestMapping("/test3")
    public String test3(String name1 ,String name2){
        return name2 + "未必不如" + name1;
    }

    //传递数组
    @RequestMapping("/test4")
    public String test4(String[] names){
        return Arrays.toString(names) + "是天才";
    }

    //传递对象
    //对象类的编写时要有带参数的构造函数或者set函数
    @RequestMapping("/test5")
    public String test5(role a){
        return a.toString();
    }

    //传递集合
    //默认情况下，请求中参数名相同的多个值，是封装到数组. 如果要封装到集合，要使⽤
    //@RequestParam 绑定参数关系
    @RequestMapping("/test6")
    public String test6(@RequestParam List<String> list){
        return list.toString();
    }

    //从前端接收参数q, 赋值给keyword
    //当访问/user?q=22时，会自动将q参数值 "22" 绑定到keyword变量(相当于给形参进行重命名)，q使用默认值 18。
    //@RequestParam是处理 HTTP 请求参数的常用注解，尤其适合处理简单的键值对参数
    @RequestMapping("/test7")
    public String test7(@RequestParam(value = "q", required = false,defaultValue = "18") String keyword){
        return "接收参数: keyword="+keyword;
    }

    //传递JSON
    @RequestMapping("/test8")
    public String test8(@RequestBody role a){
        return a.toString();
    }

    //从url中获取参数
    @RequestMapping("/test9/{name}/{profession}")
    public String test9(@PathVariable String name,@PathVariable  String profession) {
        return name + "是一名" + profession;

    }
    //上传文件
     @RequestMapping("/test10")
     public String test10(@RequestPart("file1") MultipartFile file) throws IOException {
            System.out.println(file.getOriginalFilename());
            //文件上传
            file.transferTo(new File("C:/Users/asus/Desktop/作业"+ file.getOriginalFilename()));
            return "文件上传成功";
        }

     //返回对象
    @RequestMapping("test11")
    public role test11(){
        role temp = new role("李宗伟","男",45);
        return temp;
    }

     //设置响应的状态码
    @RequestMapping("test12")
    public String test12(HttpServletResponse response){
        response.setStatus(406);
        return "状态码设置成功";
    }

    //设置响应头
    @RequestMapping("test13")
    public String test13(HttpServletResponse response){
        response.setHeader("myHeader", "myHeader1");
        return "Header设置成功";
    }
}
